package com.fbw.sys.mapper;

import com.fbw.sys.domain.Menu;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface MenuMapper {

    @Delete("delete from sys_menu where id = #{id}")
    int deleteByPrimaryKey(Integer id);

    @Insert("insert into sys_menu (id, pid,title,href, spread, target,icon, available) value " +
            "(#{id}, #{pid},#{title},#{href},#{spread}, #{target},#{icon}, #{available})")
    int insert(Menu record);

    int insertSelective(Menu record);

    @Select("selcet * from sys_menu where id #{id}")
    Menu selectByPrimaryKey(Integer id);


    int updateByPrimaryKeySelective(Menu record);

    @Update("update sys_menu set pid = #{pid},title = #{title},href = #{href},spread =" +
            " #{spread},target = #{target},icon =#{icon},available = #{available} where id = #{id}")
    int updateByPrimaryKey(Menu record);

    /**
     * 查询所有菜单
     * 查询所有可用的菜单
     * 我明白这个吊东西了，传入的menu不为空的化就根据menu查询，传入的menu为空的话就查询全部。所以这个参数是用来控制查询内容的。
     */
    List<Menu> queryAllMenu(Menu menu);

    /**
     * 根据pid查询子菜单数量
     */
    @Select("select count(1) from sys_menu where pid=#{pid}")
    Integer queryMenuByPid(Integer pid);

    /**
     * 根据菜单id删除sys_role_menu里面的数据
     *
     */
    @Delete("delete from sys_role_menu where mid=#{mid}")
    void deleteRoleMenuByMid(int rid);

    /**
     * 根据角色ID查询菜单
     * 这个就是删除菜单时，同时查找对应的用户表，删除相应的用户
     */

    List<Menu> queryMenuByRoleId(int available, int rid);

    /**
     * 根据用户ID查询菜单
     * param标记注意一下
     */
    List<Menu> queryMenuByUid(@Param("available")Integer available, @Param("uid")Integer userId);

}
